home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / h / mac2.h < prev    next >
C/C++ Source or Header  |  1992-01-22  |  5KB  |  189 lines

  1. #define MAC2
  2. #define AV
  3. #define UNIX
  4. #define SFASL  
  5.  
  6. #if defined(IN_FILE) || defined(IN_UNIXFASL) || defined(IN_UNIXSAVE) || defined(IN_UNIXTIME) || defined(IN_SFASL) || defined(IN_RSYM)
  7. #define ATT
  8. #else
  9. #define BSD
  10. #endif
  11.  
  12. #ifdef IN_MAIN
  13. #undef BSD
  14. #include <sys/time.h>
  15. #include <sys/resource.h>
  16. /* note that rl does not need to be declared if we do not have
  17.    RLIMIT_STACK defined */
  18. #undef RLIMIT_STACK
  19. #endif
  20.  
  21. #ifdef IN_SFASL
  22. #include <stdio.h>
  23. #include <filehdr.h>
  24. #include <aouthdr.h>
  25. #include <scnhdr.h>
  26. #include <reloc.h>
  27. #include <syms.h>
  28. #include <storclass.h>
  29. #include <ldfcn.h>
  30. #endif
  31.  
  32. #define ADDITIONAL_FEATURES \
  33.      ADD_FEATURE("SUN"); \
  34.      ADD_FEATURE("MAC2"); \
  35.      ADD_FEATURE("MC68020"); \
  36.      ADD_FEATURE("BSD")
  37.  
  38.  
  39. #define    MC68020
  40. #define    IEEEFLOAT
  41.  
  42.  
  43. #define MAXPAGE 16384
  44. #define VSSIZE 8152
  45.  
  46. #define ISCOFF(x) (x == MC68MAGIC)
  47.  
  48. #define     MEM_SAVE_LOCALS \
  49.   struct filehdr fileheader;\
  50.   struct exec header;\
  51.   struct scnhdr sectionheader;\
  52.   int diff
  53.  
  54.  
  55. #define COPY_TO_SAVE \
  56.  do{for (;;) { \
  57.         n = getc(original); \
  58.         if (feof(original)) \
  59.             break; \
  60.         putc(n, save); \
  61.     }}while (0)
  62.  
  63. #define READ_HEADER \
  64.  do{    fread(&fileheader, sizeof(fileheader), 1, original); \
  65.     fread(&header, sizeof(header), 1, original); \
  66.     data_begin = (char *)header.data_start; \
  67.     data_end = core_end; \
  68.     original_data = header.a_data; \
  69.     header.a_data = data_end - data_begin; \
  70.     diff = header.a_data - original_data; \
  71.     header.a_bss = sbrk(0) - core_end; \
  72.     fileheader.f_symptr += diff; \
  73.     fwrite(&fileheader, sizeof(fileheader), 1, save);\
  74.     fwrite(&header, sizeof(header), 1, save); \
  75.     fread(§ionheader, sizeof(sectionheader), 1, original); \
  76.     if (sectionheader.s_lnnoptr) \
  77.         sectionheader.s_lnnoptr += diff; \
  78.     fwrite(§ionheader, sizeof(sectionheader), 1, save); \
  79.     fread(§ionheader, sizeof(sectionheader), 1, original); \
  80.     sectionheader.s_size += diff; \
  81.     if (sectionheader.s_lnnoptr) \
  82.         sectionheader.s_lnnoptr += diff; \
  83.     fwrite(§ionheader, sizeof(sectionheader), 1, save); \
  84.     fread(§ionheader, sizeof(sectionheader), 1, original); \
  85.     sectionheader.s_paddr += diff; \
  86.     sectionheader.s_vaddr += diff; \
  87.     sectionheader.s_size = header.a_bss; \
  88.     if (sectionheader.s_lnnoptr) \
  89.         sectionheader.s_lnnoptr += diff; \
  90.     fwrite(§ionheader, sizeof(sectionheader), 1, save); \
  91.     for (n = 4;  n <= fileheader.f_nscns;  n++) { \
  92.         fread(§ionheader, sizeof(sectionheader), 1, original); \
  93.         if (sectionheader.s_scnptr) \
  94.             sectionheader.s_scnptr += diff; \
  95.         if (sectionheader.s_lnnoptr) \
  96.             sectionheader.s_lnnoptr += diff; \
  97.         fwrite(§ionheader, sizeof(sectionheader), 1, save); \
  98.     }}while(0)
  99.  
  100. #define FILECPY_HEADER    filecpy(save, original, header.a_text)
  101.  
  102.  
  103. #define exec        aouthdr
  104. #define a_text        tsize
  105. #define a_data        dsize
  106. #define a_bss        bsize
  107.  
  108. /* Include <fcntl.h> rather than <sys/file.h> */
  109.  
  110. #define HAVE_FCNTL
  111.  
  112. #define NUMBER_OPEN_FILES _NFILE 
  113.  
  114. #define SET_REAL_MAXPAGE real_maxpage = MAXPAGE ; set42sig();
  115.  
  116. #define ROUND_UP_SBRK(x)  \
  117.        do {int i; \
  118.          if (i = ((int)x & (PAGESIZE - 1))) \
  119.            x=sbrk(PAGESIZE - i); } while(0);
  120.  
  121. #define FIX_RANDOM_SBRK \
  122. do {char *x=sbrk(0); \
  123.   if (core_end != x) \
  124.    { ROUND_UP_SBRK(x); x=sbrk(0);\
  125.      while (core_end < x) \
  126.        { type_map[page(core_end)]= t_other; \
  127.      core_end = core_end + PAGESIZE;} \
  128.      if (core_end !=x) error("Someone allocated my memory");}} while (0)
  129.  
  130.      
  131. #define INIT_ALLOC \
  132.          heap_end = sbrk(0); ROUND_UP_SBRK(heap_end);\
  133.     heap_end = core_end = sbrk(0);
  134.  
  135. #define IF_ALLOCATE_ERR \
  136.         FIX_RANDOM_SBRK; \
  137.     if (core_end != sbrk(PAGESIZE*(n - m)))
  138.  
  139. #define SYM_EXTERNAL_P(sym) ((sym)->n_type & N_EXT)
  140.      
  141. #define cs_check(x) 
  142.  
  143. /* need to define getwd and friends in unixfsys.c
  144.  Basically as would need to in ATT*/
  145.  
  146.  
  147. #define LD_COMMAND(command,main,start,input,ldarg,output) \
  148.   sprintf(command, "ld -d -N -x -A %s -T %x %s %s -o %s", \
  149.             main,start,input,ldarg,output)
  150.  
  151. #define SYM_UNDEF_P(sym) ((N_SECTION(sym)) == N_UNDEF)
  152. #define NUM_AUX(sym) 0
  153.  
  154.        /* the section like N_ABS,N_TEXT,.. */
  155.  
  156.  
  157. #undef HAVE_AOUT
  158. #undef WANT_VALLOC
  159. #undef NEED_GETWD
  160.  
  161.   /* We have socket utilities, and can fork off a process
  162.    and get a stream connection with it */
  163. #define RUN_PROCESS
  164.  
  165. #define HAVE_XDR
  166.  
  167.   /* if there is no input there return false */
  168. #define LISTEN_FOR_INPUT(fp) \
  169.   if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
  170.      return 0
  171.  
  172.  /* have sys/ioctl.h */
  173. #define HAVE_IOCTL
  174.   
  175.  
  176. #define HAVE_SIGVEC
  177.   
  178. #define DATA_BEGIN (char *)N_DATADDR(header)
  179.  
  180. #define RELOC_FILE "rel_mac2.c"
  181.  
  182. /* Begin for cmpinclude */
  183. #define HAVE_ALLOCA
  184.  
  185.  
  186. /* End for cmpinclude */
  187.  
  188.  
  189.